package com.service;

import com.dto.ProductRecommendationDto;
import com.entity.Product;
import com.github.pagehelper.PageInfo;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;

/**
 * ClassName: ProductDao
 * Description: 商品信息业务接口
 *
 * @Author L_Z_R
 * @Create 2025/04/16 16:30
 * @Version 1.0
 */
public interface ProductService {
    /**
     * @author: kx
     * @date: 2025/5/20 19:53
     * @return java.util.List<com.entity.Product>
     * @description: 查询所有商品信息
     */
    ProductRecommendationDto findAll(Integer userId, HttpServletRequest request);

    /**
     * @author: kx
     * @date: 2025/5/21 9:46
     * @param page : 当前页
     * @param size : 每页显示数
     * @return com.github.pagehelper.Page<com.entity.Product>
     * @description: 分页查询所有商品信息
     */
    PageInfo<Product> findProductsByPage(int page, int size);

    /**
     * @author: kx
     * @date: 2025/6/4 20:26
     * @param title : 商品名称
     * @return java.util.List<com.entity.Product>
     * @description: 根据商品名称模糊查询商品信息
     */
    List<Product> searchProductsByTitle(String title);

    /**
     * @author: kx
     * @date: 2025/6/4 20:37
     * @param title : 商品名称
     * @param pageNum : 当前页
     * @param pageSize : 每页显示数
     * @return com.github.pagehelper.PageInfo<com.entity.Product>
     * @description:
     */
    PageInfo<Product> searchProductsByTitleWithPagination(String title, int pageNum, int pageSize);

    /**
     * @author: kx
     * @date: 2025/5/21 11:00
     * @param product : 商品信息
     * @param categoryId : 商品分类编号
     * @description: 添加商品信息
     */
    void addProduct(Product product, Integer categoryId);

    /**
     * @author: kx
     * @date: 2025/5/21 19:42
     * @param product : 商品信息
     * @description: 修改商品信息
     */
    void updateProduct(Product product);

    /**
     * @author: kx
     * @date: 2025/6/8 11:07
     * @param brand : 商品品牌
     * @param categoryId : 商品分类ID
     * @return java.util.List<com.entity.Product>
     * @description: 根据商品品牌查询该品牌下的所有商品(根据销量显示)
     */
    List<Product> findHotProductsByBrand(String brand, Integer categoryId);

    /**
     * @author: kx
     * @date: 2025/6/15 20:41
     * @param categoryId : 商品分类ID
     * @return java.util.List<com.entity.Product>
     * @description: 根据商品分类ID查询该分类下的所有商品
     */
    List<Product> getGoodsByCategoryId(Integer categoryId);

    /**
     * 查询热门商品（根据销量排序）
     * @param limit 查询的商品数量
     * @return 热门商品列表
     */
    List<Product> findHotProducts(int limit);
}
